package com.chengxiaoxiao.ai_demo.api;

import com.chengxiaoxiao.ai_demo.entity.KnowledgeBase;
import com.chengxiaoxiao.ai_demo.vo.PageResult;
import com.chengxiaoxiao.ai_demo.vo.Result;
import com.chengxiaoxiao.ai_demo.vo.form.KnowledgeBaseForm;
import com.chengxiaoxiao.ai_demo.vo.query.KnowledgeBaseQuery;
import com.chengxiaoxiao.ai_demo.vo.vo.KnowledgeSearchVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;

import java.util.List;


/**
 * 知识库 接口Swagger Api
 *
 * @Description:
 * @Author: Cheng Xiaoxiao
 * @Date: 2025-03-14 16:50:21
 */
@Tag(name = "知识库模块")
public interface KnowledgeBaseControllerApi {


    /**
     * 按照条件查询知识库信息
     *
     * @param knowledgeBaseQuery 查询条件
     * @return 结果信息
     */
    @Operation(summary = "按照条件查询知识库信息")
    Result<List<KnowledgeBase>> list(@Parameter(description = "查询条件") KnowledgeBaseQuery knowledgeBaseQuery);

    /**
     * 分页及条件查询知识库信息
     *
     * @param page               页码
     * @param size               分页大小
     * @param knowledgeBaseQuery 查询条件
     * @return 分页结果信息
     */
    @Operation(summary = "分页及条件查询知识库信息")
    Result<PageResult<KnowledgeBase>> search(@Parameter(description = "页码大小") Long size,
                                             @Parameter(description = "当前页") Long page,
                                             @Parameter(description = "查询条件") KnowledgeBaseQuery knowledgeBaseQuery);

    /**
     * 根据ID获取知识库详情
     *
     * @param id 知识库ID
     * @return 知识库详细信息
     */
    @Operation(summary = "获取单个知识库详情")
    Result<KnowledgeBase> detail(@Parameter(description = "知识库ID") String id);

    /**
     * 增加知识库
     *
     * @param knowledgeBaseForm 知识库增加表单
     * @return 增加后的知识库
     */
    @Operation(summary = "增加知识库信息")
    Result<KnowledgeBase> add(KnowledgeBaseForm knowledgeBaseForm);

    /**
     * 修改知识库信息
     *
     * @param id            知识库ID
     * @param knowledgeBase 知识库修改实体
     * @return 修改后的知识库信息
     */
    @Operation(summary = "修改知识库信息")
    Result<KnowledgeBase> updateById(@Parameter(description = "知识库ID") String id, KnowledgeBase knowledgeBase);

    /**
     * 删除知识库信息
     *
     * @param id 知识库ID
     * @return 删除结果信息
     */
    @Operation(summary = "删除单个知识库信息")
    Result<Boolean> deleteById(@Parameter(description = "知识库ID") String id);

    /**
     * 删除知识库信息
     *
     * @param idList 知识库ID数组
     * @return 删除结果信息
     */
    @Operation(summary = "批量删除知识库信息")
    Result<Boolean> batchRemove(@Parameter(description = "ID集合") List<String> idList);

    /**
     * 根据知识库ID和关键词进行关键词搜索
     *
     * @param id  知识库ID
     * @param key 关键字
     * @return 内容
     */
    @Operation(summary = "知识库搜索")
    Result<List<KnowledgeSearchVo>> search(@Parameter(description = "知识库ID") String id, @Parameter(description = "关键字") String key);
}
